import { createApp } from 'vue'
import router from './router'
import store from './store'
import App from './App.vue'
import axios from 'axios'
axios.defaults.baseURL = 'http://apis.imooc.com/api/'
axios.interceptors.request.use(config => {
  // get 请求，添加到 url 中
  config.params = { ...config.params, icode: 'AC4F12EB41AF7BF2' }
  // 其他请求，添加到 body 中
  // 如果是上传文件，添加到 FormData 中
  if (config.data instanceof FormData) {
    config.data.append('icode', 'AC4F12EB41AF7BF2')
  } else {
  // 普通的 body 对象，添加到 data 中
    config.data = { ...config.data, icode: 'AC4F12EB41AF7BF2' }
  }
  return config
})

axios.interceptors.request.use(config => {
  store.commit('setLoading', true)
  store.commit('setError', { status: false, message: '' })// 这里如果我不去初始化，到时候watch监听的时候就会失败，因为失败的状态并没有改变。

  return config
})
axios.interceptors.response.use(config => {
  setTimeout(() => {
    store.commit('setLoading', false)
  }, 1000)

  return config
}, e => {
  const { error } = e.response.data
  console.log(error)
  store.commit('setError', { status: true, message: error })

  store.commit('setLoading', false)
  return Promise.reject(error)
})// 这里就是通过失败的回调得到失败的数据，并commit去触发全局错误状态的改变。

const app = createApp(App)
app.use(store)
app.use(router) // 这里已经相当于用use使用路由，store的插件等,然后通过钩子函数
app.mount('#app')
